In a computer system, Input/Output, or I/O, is made up of the collection of interfaces that different components (e.g. CPU, keyboard, mouse, monitor, etc.) use to communicate with each other, or the signals sent through these interfaces. Signals received by a component are inputs, and signals sent from it are outputs. Output from one device is often taken as input to another, allowing different devices to be linked. I/O allows a person or other system to communicate with a computer and also allows devices within a computer to communicate with one another.
I/O may also refer to an input or output operation performed by one of these devices. Typical input devices include keyboards and mice, and typical output devices include monitors and printers. Modems and network cards, which provide communications between computers, are generally both input and output devices. Buses connect different computer components and can use the same set of wires to connect several peripherals. I/O is often transferred between devices using buses.
In computer architecture, any movement of information to or from the combination of the CPU and main memory (e.g. data transfer to or from a disk drive) is considered I/O. The CPU and supporting circuitry provide I/O methods that are used in low-level computer programming in the implementation of device drivers.
In operating a computer system, some I/O operations depend on one another. For example, data may have to be written to a device first before it is accessed by another device. Problems may occur if I/O operations are performed out of order. As a result, I/O operations in a system are often executed serially to ensure that they are performed in the right order. Doing so usually results in poor performance, as any multithreaded capabilities are not utilized. However, if dependency relationships between I/Os are known, then some I/Os can be executed in parallel in order to maximize throughput and minimize the overall latency in completing a large number of I/Os.
When I/Os are scheduled by multiple applications, some applications may be more important or vital than others and should have preferential treatment. As a result, I/Os of more important applications should be scheduled earlier and/or more often than I/Os of less important applications. This would allow individual applications to run more smoothly and optimize overall performance in the system.